package com.facade;

import java.io.Serializable;
import java.util.List;

import com.dao.DogDAO;
import com.model.Dog;

/**
 * Classe que faz operacoes de 
 * CRUD(Ler, Apagar, Deletar e Procurar) 
 * para a Entidade cachorro no banco de dados 
 * ela faz isso usando as classes DAO 
 *
 */

public class DogFacade implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private DogDAO dogDAO = new DogDAO();
	
	//Abre uma transacao pega o objeto dog salva ele na memoria usando o metodo save e depois salva ele no banco de dados
	public void createDog(Dog dog) {
		dogDAO.beginTransaction();
		dogDAO.save(dog);
		dogDAO.commitAndCloseTransaction();
	}
	
	public void updateDog(Dog dog) {
		dogDAO.beginTransaction();
		//Procura o dog persistido(que esta salvo no banco de dados)
		Dog persistedDog = dogDAO.find(dog.getId());
		persistedDog.setAge(dog.getAge());
		persistedDog.setName(dog.getName());
		dogDAO.update(persistedDog);
		dogDAO.commitAndCloseTransaction();
	}
	
	public Dog findDog(int dogId) {
		dogDAO.beginTransaction();
		Dog dog = dogDAO.find(dogId);
		dogDAO.closeTransaction();
		return dog;
	}
	
	/**
	 * Retorna uma lista de todos os cachorros que estao armazenados no banco de dados
	 * 
	 */
	
	public List<Dog> listAll() {
		dogDAO.beginTransaction();
		List<Dog> result = dogDAO.findAll();
		dogDAO.closeTransaction();
		return result;
	}
	
	/**
	 * Apaga um cachorro especifico do banco de dados
	 */
	public void deleteDog(Dog dog) {
		dogDAO.beginTransaction();
		Dog persistedDog = dogDAO.findReferenceOnly(dog.getId());
		dogDAO.delete(persistedDog);
		dogDAO.commitAndCloseTransaction();
	}
}
